//
//  CZHomeTableViewController.swift
//  Weibo30
//
//  Created by apple on 16/8/8.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

//  重用标记
private let HomeTableViewCellIdentifier = "HomeTableViewCellIdentifier"

//  首页
class CZHomeTableViewController: CZVisitorTableViewController {
    
    //  使用懒加载方式创建所需要的ViewModel
    private lazy var statusListViewModel: CZStatusListViewModel = CZStatusListViewModel()
    
    //  风火轮
    private lazy var pullUpView: UIActivityIndicatorView = {
        let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        view.color = UIColor.redColor()
        return view
    }()
    
    //  系统的下拉刷新控件
    private lazy var refreshCtr: UIRefreshControl = {
    
        let ctr = UIRefreshControl()
        ctr.addTarget(self, action: "pullDownRefresh", forControlEvents: .ValueChanged)
        return ctr
    }()
    //  自定义下拉刷新控件
    private lazy var pullDownView: CZRefreshControl = {
        let ctr = CZRefreshControl()
        ctr.addTarget(self, action: "pullDownRefresh", forControlEvents: .ValueChanged)
        return ctr
    }()
    
    //  tip动画label
    private lazy var tipLabel: UILabel = {
        let label = UILabel(fontSize: 12, textColor: UIColor.whiteColor())
        label.backgroundColor = UIColor.orangeColor()
        label.text = "没有加载到微博数据"
        label.textAlignment = .Center
        //  默认隐藏
        label.hidden = true
        return label
    
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        if isLogin {
            setupUI()
            
            //  登陆成功
            loadData()
        } else {
            visitorView?.updateVisitorViewInfo(nil, imageName: nil)
        
        }
    }
    
    
    //  添加控件设置约束
    private func setupUI() {
        //  设置tableview相关操作
        setupTableView()
        //  判断导航控制器是否存在,存在插入tipLabel
        if let nav = self.navigationController {
            tipLabel.frame = CGRect(x: 0, y: CGRectGetMaxY(nav.navigationBar.frame) - 30, width: nav.navigationBar.width, height: 30)
            nav.view.insertSubview(tipLabel, belowSubview: nav.navigationBar)
        }
        
    
    }
    
    
    //  设置tableView相关操作
    private func setupTableView() {
        //  注册cell
        tableView.registerClass(CZStatusTableViewCell.self, forCellReuseIdentifier: HomeTableViewCellIdentifier)
        //  设置行高
        //  自动计算行高
        //  根据contentView的最大y值作为cell的高度
        tableView.rowHeight = UITableViewAutomaticDimension
        //  预估高度 ,  如果不显示cell那么高度就是预估的高度,让其滚动起来,当显示cell的时候在去计算
        tableView.estimatedRowHeight = 200
        //  去掉分割线
        tableView.separatorStyle = .None
        
        //  添加上拉刷新控件
        tableView.tableFooterView = pullUpView
        //  指定大小
        pullUpView.sizeToFit()
        //  添加系统下拉刷新的方式1
        //self.refreshControl = refreshCtr
        //  添加系统下拉刷的方式2
        //tableView.addSubview(refreshCtr)
        //  使用自定义下拉刷新控件
        tableView.addSubview(pullDownView)
        
        
        
        
        
       
    }
    
    
    @objc private func pullDownRefresh() {
    
        
        //  加载下拉刷新的数据
//        //  延时两秒回调
//        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(),{ () -> Void in
//            self.refreshCtr.endRefreshing()
//        })

        loadData()
        
        
        
    }
    
    
    //  结束刷新的方法
    private func endRefreshing() {
        //  停止菊花转
        pullUpView.stopAnimating()
        //  结束系统下拉刷新的状态
        refreshCtr.endRefreshing()
        //  结束自定义下拉刷新的状态
        pullDownView.endRefreshing()
    
    }
    
    //  根据服务端返回的信息显示tip文字
    private func startAnimation(message: String) {
    
        //  判断视图如果显示表示正在执行动画,让其直接返回不执行下面的代码
        if tipLabel.hidden == false {
            return
        }
        
        //  设置显示文字
        tipLabel.text = message
        //  显示tiplabel
        tipLabel.hidden = false
        
        UIView.animateWithDuration(1, animations: { () -> Void in
            
            self.tipLabel.transform = CGAffineTransformMakeTranslation(0, self.tipLabel.height)
            
            
            }) { (_) -> Void in
                
                UIView.animateWithDuration(1, animations: { () -> Void in
                    
                    self.tipLabel.transform = CGAffineTransformIdentity
                    
                    }, completion: { (_) -> Void in
                        //  隐藏tiplabel
                        self.tipLabel.hidden = true
                })
                
                
        }
        
        
        
        
        
    }
    
    
    //  加载微博数据
    private func loadData() {
        
        //  根据pullupView.isAnimating作为标记,进行上拉或者下拉刷新
        
        
        statusListViewModel.loadData(pullUpView.isAnimating()) { (isSuccess, message) -> () in
            //  开启tip动画
            if !self.pullUpView.isAnimating() {
                self.startAnimation(message)
            }
            
            self.endRefreshing()
            if isSuccess {
                //  数据请求成功重写刷新数据
                self.tableView.reloadData()
            } else {
                print("数据请求异常")
            }
        }
        
        
    
//        CZNetworkTools.sharedTools.requestStatuses(CZUserAccountViewModel.sharedUserAccount.accessToken!) { (response, error) -> () in
//            if error != nil {
//                print("网络请求异常,\(error)")
//                return
//            }
//            //  代码执行到此,表示网络请求成功
//            guard let dic = response as? [String: AnyObject] else {
//                print("字典格式不正确")
//                return
//            }
//            //  字典格式正确
//            guard let dicArray = dic["statuses"] as? [[String: AnyObject]] else {
//                print("字典格式不正确")
//                return
//            }
//            var tempArray = [CZStatus]()
//            for value in dicArray {
//                
//                //  字典转模型
//                let status = CZStatus(dic: value)
//
//                tempArray.append(status)
//                
//            }
//            //  设置数据源
//            self.statusList = tempArray
//            //  刷新数据
//            self.tableView.reloadData()
//
//            
//        }
    
    }
    

}

//  MARK: - UITableViewDataSource 数据源代理
extension CZHomeTableViewController {
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel.statusList.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(HomeTableViewCellIdentifier, forIndexPath: indexPath) as! CZStatusTableViewCell
        
        //  给cell绑定数据
        cell.statusViewModel = statusListViewModel.statusList[indexPath.row]
        //  取消选中颜色
        cell.selectionStyle = .None
        
        return cell
    }
    
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        if indexPath.row == statusListViewModel.statusList.count - 1 && !pullUpView.isAnimating() {
            print("已经是最后一天微博数据了")
            
            //  开启风火轮
            pullUpView.startAnimating()
            //  加载更多数据
            loadData()
        }
    }

}




















